const axios = require('axios');

class Juhe {
    constructor(options) {
        this.config = options;
    }

    /**
     * 发送短信
     * https://www.juhe.cn/docs/api/id/54
     * @param {*} options 
     * @param {Object} 内容 options.data
     * @param {String} 手机号 options.mobile
     * @param {Number} 模板Id options.templateId
     * @param {Number} 模板Id options.templateId
     */
    sendSms(options) {
        const { data, mobile, key, templateId } = options;

        let tplValue = '';
        for (let key in data) {
            let value = data[key];

            if (tplValue != '') tplValue += '&';

            tplValue += "#" + key + "#=" + value;
        }

        return this.http({
            url: 'http://v.juhe.cn/sms/send',
            params: {
                mobile,
                tpl_id: templateId,
                tpl_value: encodeURIComponent(tplValue),
                key: key || this.config.keys.sendSms,
            }
        })
    }

    /**
     * 快递查询
     * https://www.juhe.cn/box/index/id/43
     * @param {*} options 
     * @param {Object} 内容 options.com 快递公司编号
     * @param {String} 手机号 options.no 快递单号
     * @param {Number} 寄件人手机号后四位 options.senderPhone 顺丰快递需要提供senderPhone和receiverPhone其中一个
     * @param {Number} 寄件人手机号后四位 options.receiverPhone 顺丰快递需要提供senderPhone和receiverPhone其中一个
     */
    express(options) {
        return this.http({
            url: 'http://v.juhe.cn/exp/index',
            params: {
                key: this.config.express,
                ...options,
            }
        });
    }
    /**
     * 请求
     */
    http(options) {

        return new Promise((resolve, reject) => {
            axios(options)
                .then((v) => {
                    if (v.data.error_code == 0) {
                        resolve(v.data)
                    } else {
                        reject({
                            ...v.data,
                            message: v.data.reason,
                        })
                    }
                })
                .catch(error => {
                    reject({
                        message: '服务器异常',
                    })
                });
        })
    }
}


module.exports = Juhe;